package org.auf.controllers;

import java.util.Collection;
import java.util.Iterator;

import javax.servlet.http.HttpSession;

import org.apache.log4j.Logger;
import org.auf.core.Controller;
import org.auf.model.dao.IPairedDAO;
import org.auf.model.dao.ITestDAO;
import org.auf.model.dao.IUserDAO;
import org.auf.model.jdbc.PairedDAOJDBC;
import org.auf.model.jdbc.TestDAOJDBC;
import org.auf.model.jdbc.UserDAOJDBC;
import org.auf.to.Paired;
import org.auf.to.Question;
import org.auf.to.Test;
import org.auf.to.User;

public class EvaluateTestController extends Controller {
	static Logger log = Logger.getLogger(EvaluateTestController.class.getName());
//falta asegurarse que el user es geek
	//pendiente de revision la actualizacion de la pareja
	@Override
	public void show() {
		
		int score = 10;
		
		HttpSession session = request.getSession(false);
		
		if (session == null) {
		
			view.load("error");
			view.assignVar("message", "Implementar: Falta la evaluacion del test");
			view.show();
			
			return;
		}
		
		User tuser = (User) session.getAttribute("user.temp");
		
		if (tuser != null) {
			IUserDAO userdao = UserDAOJDBC.getInstance();
			
			tuser.setScore(score);
			
			userdao.insertUser(tuser);
			
			view.load("message");
			view.assignVar("message", "Gracias por registrarse en nuestra base de base de datos.");
			view.show();
		}
		
		
		
		/*
		String idTest, value;
		int i=1, total = 0, correct = 0;
		Question q;
		boolean error=false, cookie=false;
		User actual;
		
		idTest = (String) request.getAttribute("idTest");
		value = (String) request.getAttribute("answer" + i);
		Test exam = new Test();
		ITestDAO testdao = new TestDAOJDBC();
		exam = testdao.selectTestById(idTest);
		Collection<Question> questions = exam.getQuestions();
		Iterator<Question> it = questions.iterator();
		
		if (request.getSession().getAttribute("user.temp")!=null)
			actual = (User) request.getSession().getAttribute("user.temp");
		else // para ver si el usuario se acaba de crear
			actual = user;
		
		while (value!=null && !error) { // si no hay mas respuestas
			if (it.hasNext()) {
				q = (Question) it.next();
				correct = q.getCorrect();
			} else { // si no hay mas preguntas
				log.error("Coleta la ha cagado.");
				error = true;
			}
			if (correct == Integer.valueOf(value))
				total = total++;
			i++;
			value = (String) request.getAttribute("answer" + i);
		}
		
		if (!error) {
			//DAO: coger voluntario del friki a partir de su ultimo emparejamiento
			Paired pair = new Paired();
			IPairedDAO paireddao = PairedDAOJDBC.getInstance();
			pair = paireddao.selectLastPairedByGeek(actual);
			IUserDAO userdao = UserDAOJDBC.getInstance();
			User volunteer = pair.getVolunteer(); // devuelve nulo si es el primer test
			//DAO: guardar en friki: notafrikiactual			
			actual.setScore(total);
			userdao.updateUserScore(actual);
			//DAO: guardar en voluntario: notavoluntarioactual + (notafrikianterior - notafrikiactual)
			if (volunteer != null) {
				int notaAux = actual.getScore() - i;
				volunteer.setScore(volunteer.getScore() + notaAux);
				userdao.updateUserScore(volunteer);
				pair.setTestCompleted(true);
				//DAO: modifico paired para poner el test como hecho
				if (request.getSession().getAttribute("userTemp")!=null) {
					paireddao.insertPaired(pair);
					cookie = true;
				} else {
					paireddao.updatePairedTestCompleted(pair);
					cookie = false;
				}
			}

		view.load("message");
		if (cookie) {
			//view.assignVar("geek", request.getSession().getAttribute("userTemp").getGeek()); //WTF?!?!?!?
		} else {
			view.assignVar("geek", new Boolean(user.getGeek()).toString());
			view.assignVar("text", "Gracias por realizar su test.");
			view.show();
			}
		}
		*/
	}
}
